#include <vector>
#include <unordered_map>
#include <string>
#include <algorithm>
#include <stack>

using namespace std;

class Solution {
public:
    string simplifyPath(string path) {
        stack<string> st;
        string tmp;
        int i = 0;
        int size = path.size();
        while(i < size)
        {
            if(path[i] == '/')
            {
                if(!tmp.empty())
                {
                    if(tmp == ".")
                    {
                        tmp.clear();
                    }
                    else if(tmp == "..")
                    {
                        if(!st.empty())
                            st.pop();
                        tmp.clear();
                    }
                    else
                    {
                    st.push(tmp);
                    tmp.clear();
                    }
                }
                while(i < size && path[i] == '/')
                {
                    i++;
                }
            }
            else
            {
                tmp+=path[i];
                i++;
            }
        }
        if(!tmp.empty())
        {
            if(tmp == "..")
            {
                if(!st.empty())
                st.pop();
            }
            if(tmp == ".")
            {
            }
            else
                st.push(tmp);
        }

        if(!st.empty() && (st.top() == "." || st.top() == ".."))
            st.pop();
        string ret;
        stack<string> ret_st;
        while(!st.empty())
        {
            ret_st.push(st.top());
            st.pop();
        }
        while(!ret_st.empty())
        {
            ret+='/';
            ret+=ret_st.top();
            ret_st.pop();
        }
        if(ret == "")
            ret+='/';
        return ret;
    }
};